The background description provided herein is for the purpose of generally presenting the context of the disclosure. Work of the presently named inventors, to the extent it is described in this background section, as well as aspects of the description that may not otherwise qualify as prior art at the time of filing, are neither expressly nor impliedly admitted as prior art against the present disclosure.
Referring now to FIG. 1, non-volatile semiconductor memory 10 may include flash memory, static random access memory (SRAM), nitride read only memory (NROM), magnetic RAM, Phase-change memory (PRAM), etc. A memory controller 12 may write and read data to NV memory 10 through write and read paths 14, 16. Data corruption or errors in NV memory 10 may occur in the form of interference, such as intersymbol interference, and/or noise “n”.
Referring now to FIGS. 1 and 2, an encoder 18 of the write path 14 may receive a data stream U and may apply an error correcting code (ECC) to data to generate an encoded signal Y. NV memory 10 may store encoded data. A decoder 24 of the read path 16 may use the ECC to detect and correct errors in a read signal Y′ to generate a data stream U′. U′ may resemble U.
The encoder 18 may encode U in a one dimensional (1D) array 30. The array 30 may include a series of rows 31-1, 31-2, . . . , and 31-M (collectively rows 31) of length N. Each row may contain a user data area 32 of length K and an overhead data area 34 of length N-K that may contain ECC encoded data. K and N-K may be based on the number of bits stored in respective areas 32, 34.
The decoder 24 may analyze the ECC encoded data during a read operation to determine if there is an error and/or to correct such an error. ECCs may include common coefficients for specialized polynomial equations. When the data is read out of NV memory 10, the data integrity may be checked by regenerating these coefficients from the read data. If the regenerated and stored ECCs do not “match”, an error may have been detected.
Exemplary ECCs include Hamming codes, Reed-Solomon (RS) codes, and Bose-Chaudhuri-Hochquenghem (BCH) binary codes. Other ECCs include cyclic redundancy codes (CRC), Golay codes, Reed-Muller codes, Goppa codes, low-density parity-check (LDPC) codes, turbo codes, convolutional codes, trellis coded modulation (TCM), block coded modulation (BCM), etc.
The decoder 24 may recover the data but there may be some acceptably small probability of incorrect recovery. However, the probability of reliable data recovery may decrease rapidly with an increasing number of errors. Once an error in read data is detected, the decoder 24 may attempt to correct and/or erase the error.
Hamming distance is a measure of the error detection and correction capability of a code. The Hamming distance between two data words is the number of positions for which the corresponding bits are different. In other words, Hamming distance measures the number of substitutions required to change one word into another, or the number of errors that transformed one word into another. For example, the Hamming distance between 1111 and 1001 is 2. The Hamming distance between 1111 and 0001 is 3.
To detect E digits in error, a code of a minimum Hamming distance of (E+1) may be required. To correct E errors, a code must display a minimum Hamming distance of (2E+1). The minimum distance is indicative of an amount of noise that the system can tolerate before a stored codeword is decoded erroneously.